/**
 * 所有左侧的进栈（记录对应的右侧），遇到右侧进行比较
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
输入：s = "([)]"  输出：false
输入：s = "()[]{}" 输出：true
有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
 */
// var isValid = function(s) {
//   let stack = [];
//   for(let i=0;i<s.length;i++){
//     // 左括号进栈对应的右括号
//     if(s[i]=='('){
//       stack.push(')')
//     }else
//     if(s[i]=='['){
//       stack.push(']')
//     }else
//     if(s[i]=='{'){
//       stack.push('}')
//     }else if(s[i]!==stack.pop()){ //遍历到右括号进行对比
//       return false
//     }
//   }
//   return stack.length==0
// };
// const s = "([)]"
// console.log(isValid(s)) //false
var isValid = function(s) {
  const map = {
    '(':')',
    '[':']',
    '{':'}'
  }
  const stack = [];
  for(let i=0;i<s.length;i++) {
    if(map[s[i]]){
      stack.push(map[s[i]])
    }else if(stack.pop()!== s[i]){
      return false
    }
  }
  return stack.length===0
}
const s = "()[]{}"
console.log(isValid(s)) //true